import axios from 'axios'
import {getToken} from '@/util/auth'
import {Message} from 'element-ui'
// import {sessionData} from "@/util/localstore";
import router from '@/router'
// 超时时间
axios.defaults.timeout = 10000
// 跨域请求，允许保存cookie
axios.defaults.withCredentials = true;
// NProgress.configure({ showSpinner: false })// NProgress Configuration
// request interceptor // 请求拦截（配置发送请求的信息）
axios.interceptors.request.use(config => {
  if(config.url=="/userInfo/login"){
    return config
  }
  //  debugger
  // NProgress.start() // start progress bar
  if (getToken()) {
    config.headers['Authorization'] = getToken() // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
  }
  else {
    // 重定向到登录页面
    router.push('/login')
  }
  //处理请求之前的配置
  return config
}, error => {
  // 请求错误时
  // 1. 判断请求超时
  if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
    console.log('timeout请求超时')
    // return service.request(originalRequest);// 再重复请求一次
  }
  // 2. 需要重定向到错误页面
  const errorInfo = error.response
  if (errorInfo) {
    error = errorInfo.data  // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
    const errorStatus = errorInfo.status; // 404 403 500 ...
    router.push({
      path: `/error/${errorStatus}`
    })
  }
  return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
})

// respone interceptor // 响应拦截（配置请求回来的信息）
axios.interceptors.response.use(response => {
    // debugger
  const res = response.data
  if (res.code === -1) {
    message(res.message, 'error')
    return Promise.reject(res)
  }
  if (res.code === 401) {
    message(res.message, 'error')
    // sessionData("clearAll")
    router.push('/login')
  }
  return res
}, error => {
  const res = error.response
  if (res.code) {
     if (res.code === 403) {
      message(res.code + '： ' + res.data.msg, 'error')
    } else if (res.code === 400) {
      message(res.code + '： ' + res.data.error_description, 'error')
    } else if (res.code === 202) {
      this.$router.push({
        path: '/'
      })
    } else if (res.code === 503) { // 服务异常
      message(res.code + '： ' + res.data, 'error')
    } else {
      message(res.code + '： ' + res.data.message, 'error')
    }
  }
  return Promise.reject(new Error(res.data.message))
})

export function message(text, type) {
  Message({
    message: text,
    type: type,
    duration: 5 * 1000
  })
}

export default axios